<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Student;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;


class StudentController extends Controller
{
    //facade方式curd
    public function test1()
    {
        return "input it!";
        //查询
//        $student =  DB::select("select * from student");
//        dd($student);

//        $student = DB::select("select * from student where id > ?",[1]);
//        dd($student);

        //插入
//        $bool = DB::insert('insert into student(name,age) values (?,?)',
//            ['hongjian',28]
//            );
//        var_dump($bool);

        //更新
//        $num = DB::update("update student set age = ? where name = ?",[24,'jinhua']);
//        var_dump($num);

        //删除
//        $res = DB::delete('delete from student where id > ?',[1]);
//        var_dump($res);
    }

    //使用查询构造器插入数据 query1-5
    public function query1()
    {
//        $bool = DB::table('student')->insert(
//            ['name'=>'xiaoming','age'=>18]
//        );
//        var_dump($bool);

//        $id = DB::table('student')->insertGetId(
//            ['name'=>'xiaohong','age'=>15]
//            );
//        var_dump($id);

        $bool = DB::table('student')->insert(
            ['name'=>'hong','age'=>13],
            ['name'=>'ggg','age'=>13]
        );
        var_dump($bool);
    }

    //使用查询构造器更新数据
    public function query2()
    {
//        $num = DB::table('student')
//            ->where('id',5)
//            ->update(['age'=>30]);
//        var_dump($num);

//        $num = DB::table('student')->increment('age');
//        $num = DB::table('student')->increment('age',3);

//        $num = DB::table('student')->decrement('age');
//        $num = DB::table('student')->decrement('age',3);

//        $num = DB::table('student')
//            ->where('id',5)
//            ->decrement('age',3);

//        $num = DB::table('student')
//            ->where('id',5)
//            ->decrement('age',3,['name'=>'hongjie']);
//        var_dump($num);
    }

    //使用查询构造器删除数据
    public function query3()
    {
//        $num = DB::table('student')
//            ->where('id',5)
//            ->delete();

//        $num = DB::table('student')
//            ->where('id','>=',3)
//            ->delete();
//        var_dump($num);

        //清空数据表：不返回任何值
        DB::table('student')->truncate();
    }

    //使用查询构造器查询数据
    public function query4()
    {
//        $bool = DB::table('student')->insert([
//            ['name'=>'hong1','age'=>13],
//            ['name'=>'ggg1','age'=>12]
//        ]);
//        var_dump($bool);

        //get获取表的所有数据
//        $student = DB::table('student')->get();

        //first 获取第一条数据记录
//        $student = DB::table('student')
//            ->orderBy('id','desc')
//            ->first();

        //where
//        $student = DB::table('student')
//            ->where('id','>=',0)
//            ->get();

//        $student = DB::table('student')
//            ->whereRaw('id >= ? and age >= ?',[2,13])
//            ->get();

        //pluck
//        $names = DB::table('student')
//            ->pluck('name');

        //lists
//        $names = DB::table('student')
//            ->lists('name','id');

        //select
//        $names = DB::table('student')
//            ->select('id','name','age')
//            ->get();

        //chunk  每次查询多少条
        echo '<pre>';
        DB::table('student')->chunk(1,function($students){
            var_dump($students);

            if(1/*你的条件*/){
                return false;
            }
        });


        dd($names);
//        dd($student);

    }

    //使用查询构造器的聚合函数
    public function query5()
    {
//        $count = DB::table('student')->count();

//        $max = DB::table('student')->max('age');

//        $min = DB::table('student')->min('age');

        $avg = DB::table('student')->avg('age');

        $sum = DB::table('student')->sum('age');


        var_dump($sum);
    }

    //Eloquent ORM  简介
    public function orm1()
    {
        //all() 查询出所有学生
//        $student = Student::all();
//        dd($student);

        //find() 查询一条记录
//        $student = Student::find(33);
//        dd($student);

        //findOrFail()  根据条件查找，如果查找不到抛出异常
//        $student = Student::findOrFail(103);
//        var_dump($student);

        //查询构造器方法在orm中的使用
//        $student = Student::get(); //查询所有
//
//        $student = Student::where('id','>','2')  //根据条件查询
//        ->orderBy('age','desc')   //查询所有
//        ->first();                //查询第一条
//        dd($student);

//        echo '<pre>';
//        Student::chunk(2,function($students){
//            var_dump($students);
//        });

        //聚合函数在orm的使用
//        $num = Student::count();
//        var_dump($num);

//        $max = Student::where('id','>',1)->max('age');
//        var_dump($max);
    }

    public function orm2()
    {
        //使用模型新增数据
//        $student = new Student();
//        $student->name ='jinhua1';
//        $student->age = 20;
//        $bool = $student->save();
//        dd($student);

//        $student = Student::find(8);
//        echo $student->created_at;

        //使用模型的create方法新增数据
//        $student = Student::create(
//            ['name' => 'xiaolei','age' => '12']
//        );
//        dd($student);

        //firstOrCreate() 以属性查找新的记录，如果没有即新增记录并返回该条记录
//        $student = Student::firstOrCreate(
//            ['name'=>'xiaolei2']
//        );

        //firstOrNew()  以属性查找用户，如果没有则建立新的实例
//        $student = Student::firstOrNew(
//            ['name' => 'xiaolei3']
//        );
//        //以上的操作没有保存到数据库中，要想保存在数据库则进行以下操作
//        $bool = $student->save();
//        dd($bool);

    }

    //使用Eloquent ORM修改数据
    public function orm3()
    {
        //1 通过模型更新数据
//        $student = Student::find(12);
//        $student->name = 'keattsdf';
//        $bool = $student->save();
//        var_dump($bool);

        //结合查询语句批量更新
        $num = Student::where('id','>=',10)->update(
            ['age' => 50]
        );
        var_dump($num);
    }

    //使用Eloquent ORM删除数据
    public function orm4()
    {
        //通过模型删除数据
//        $student = Student::find(12);
//        $bool = $student->delete();
//        var_dump($bool);

        //通过主键删除  返回被删除的行数
//        $num = Student::destroy(11,10);
////        $num = Student::destroy([11,10]);
//        var_dump($num);

        //通过指定删除
        $num = Student::where('id','>=',8)->delete();
        var_dump($num);
    }

    //视图输出PHP变量
    public function section1()
    {
        $students = Student::all();
        $name = '林锦华';
        $arr = ['jinhua','林锦华'];
        return view('student.section1',
            ['name'=>$name,
                'arr'=>$arr,
                'students'=>$students,
                'kong'=>[],
            ]
        );
    }

    //超链接
    public function urlTest()
    {
       return 'urlTest';
    }

    //$request的使用
    public function request1(Request $request)
    {
        //1. 取值
//        echo $request->input('name');

        //2. 加上默认值
//        echo $request->input('sex','未知');

//        if($request->has('name')){
//            echo $request->input('name');
//        }else{
//            echo '无该参数';
//        }

//        dd($request->all());

        //3.判断请求方法
//        echo $request->method();

//        if($request->isMethod('get')){
//            echo 'yes';
//        }else{
//            echo 'no';
//        }

//        $res = $request->ajax();
//        var_dump($res);

//        $res = $request->is('student/*');
//        var_dump($res);

        echo $request->url();
    }

    //session

    /**
     * @param Request $request
     */
    public function session1(Request $request){
        //1.HTTP request session();
//        $request->session()->put('key1','value');
//        echo $request->session()->get('key1');

        //2.session()  session的辅助函数
//        session()->put('key2','value2');
//        echo session()->get('key2');

        //3.session 通过session类
//        Session::put('key3','value3');     //存储session
//        echo Session::get('key3');          //获取session
//        echo Session::get('key4','default'); //session不存在的时候设置并获取默认的值

        //以数组的形式存储数组
//        Session::put(['key5'=>'value5']);

        //把数据放到Session的数组中
//        Session::push('student','jinhua');
//        Session::push('student','jinqiang');
        //         dd(Session::get('student'));          //获取session


        //第一次取出数据之后把数据删除，第二个参数设置取出后不存在值的默认值
//        $res = Session::pull('student','default');  //取出数据并删除
//        var_dump($res);

        //取出session所有的值
//        $res = Session::all();
//        dd($res);

        //判断session中某个key是否存在
//        if(!Session::has('key1')){
//            $res = Session::all();
//            dd($res);
//        }else{
//            echo "false";
//        }

        //删除sesssion中某个key的值
//        Session::forget('key3');
//        $res = Session::all();
//        dd($res);


        //把session中的数据都清空
//        $res = Session::flush();
//        dd($res);

        //第一次访问的时候存在，下次访问不存在
        Session::flash('key66','66666');
//        echo Session::get('keyey');

    }

    public function session2(Request $request){

        return Session::get('message','暂无数据');
        //return 'session2';
        //echo Session::get('key66');
    }

    public function response()
    {
        //3.响应json
        /*$data = [
            'errCode' => 0,
            'errMsg'  => 'success',
            'data'    => 'my name is linjinhua',
        ];
        return response()->json($data);*/

        //4.重定向
        //return redirect('session2');

        //重定向传值
//        return redirect('session2')->with('message','我是快闪数据');

        //action()
        /*return redirect()->action('StudentController@session2')
            ->with('message','我是快闪数据');*/

        //route()
/*        return redirect()->route('session2')
            ->with('message','快闪数据');*/

        //返回上一层
        return redirect()->back();
    }

    public function activity0()
    {
        return "活动尚未开始，敬请期待！";
    }

    public function activity1()
    {
        return "活动正在进行中，谢谢您的参与！";
    }

    public function activity2()
    {
        return "活动将要结束，请抓紧时间参与！";
    }









}





